﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using QLTV_BLL;
using QLTV_Public;
using System.IO;

namespace GUI
{
    public partial class frmMuonTaiLieu : DevExpress.XtraEditors.XtraForm
    {
        #region khai bao bien
        DataRow row;
        TextMessageBox box = new TextMessageBox();
        DataTable dt = new DataTable();
        CT_PhieuYeuCau_BLL ct_pyc_bll = new CT_PhieuYeuCau_BLL();
        PhieuYeuCau_BLL pyc_bll = new PhieuYeuCau_BLL();
        private string ngayLamThe = "";
        private string ngayHetHan = "";
        private Image image;
        private int soLuongCon = 0;
        private int soLuongDaMuon = 0;
        private int slg = 0;
        private int thoiGianMuon;
        string nhande = "";
       
        #endregion

        #region LoadForm

        public frmMuonTaiLieu()
        {
            InitializeComponent();
        }

        private void frmMuonTaiLieu_Load(object sender, EventArgs e)
        {
            LoadData();
            grd_Data.Enabled = false;
        }

        #endregion

        #region cac chuc nang
        private void btnLuu_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            
            grvData.CloseEditor();
            grvData.UpdateCurrentRow();
            string[] str=box.GetSystemDate().ToString("dd/MM/yy").Split('/');
            string s="";
            for(int i=0;i<str.Length;i++)
            {
                s+=str[i];
            }
            if (checkValid())
            {
                int d = grvData.RowCount;
                if (grvData.RowCount > 0)
                {
                   
                    string ma=box.AutoID("PYC"+s,9,ct_pyc_bll.TaoBang("select * from PhieuYeuCau where MaPhieuYC like '"+"PYC"+s+"'+'%'"));
                    if (checkRow())
                    {
                        PhieuYeuCau_Public pyc = new PhieuYeuCau_Public();
                        //luu vao phieu yeu cau
                        pyc.MaPhieuYC = ma;
                        pyc.MaDocGia = txtMaBanDoc.Text.Trim();
                        pyc.NgayLapPhieu = box.GetSystemDate();
                        pyc.TongTaiLieu = d;
                        pyc.MaNhanVien = box.MaNhanVien;
                        pyc_bll.Insert(pyc);
                        //lưu vao chi tiết phiếu yêu cầu
                        for (int j = 0; j < grvData.RowCount; j++)
                        { 
                            CT_PhieuYeuCau_Public ct = new CT_PhieuYeuCau_Public();
                            ct.MaPhieuYC = ma;
                            ct.SoCaBiet = grvData.GetRowCellValue(j, colSoCaBiet).ToString();
                            ct.NgayMuon = box.GetSystemDate();
                            ct.NgayDuTra = Convert.ToDateTime(grvData.GetRowCellValue(j, colNgayDuTra));
                            ct.TrangThaiGiaHan = false;
                            ct.TrangThaiMuon = true;
                            ct.MaNhanVien1 = box.MaNhanVien;
                            ct_pyc_bll.Insert(ct);
                        }

                        XtraMessageBox.Show("Ghi Mượn thành công.",box.Caption,MessageBoxButtons.OK,MessageBoxIcon.Information);
                        btnHuy_ItemClick(sender,e);
                        ((DataTable)grd_Data.DataSource).Clear();

                    }
                }
                else
                    XtraMessageBox.Show("Dữ liệu trống.Hãy nhập thêm dữ liệu",box.Caption,MessageBoxButtons.OK,MessageBoxIcon.Information);
            }
        }

        private void btnHuy_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            ((DataTable)grd_Data.DataSource).Clear();
            txtMaBanDoc.Text = "";
        }

        private void btnXoa_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (XtraMessageBox.Show("Bạn có chắc muốn xóa dòng đang chọn không?", box.Caption, MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
            {
                if (grvData.IsDataRow(grvData.FocusedRowHandle))
                {
                    grvData.DeleteSelectedRows();
                }
            }
        }
        #endregion

        #region ham viet them
        private void LoadData()
        {
            dt.Columns.Add("SoCaBiet", typeof(string));
            dt.Columns.Add("NhanDe", typeof(string));
            dt.Columns.Add("NgayDuTra", typeof(DateTime));
            grd_Data.DataSource = dt;
        }

        private bool checkRow()
        {
            
            for(int i=0;i<grvData.RowCount;i++)
            {
               
                if (grvData.GetRowCellValue(i, colSoCaBiet).ToString().Equals(string.Empty))
                {
                    XtraMessageBox.Show("Bạn chưa nhập Số cá biệt.Hãy nhập lại!",box.Caption,MessageBoxButtons.OK,MessageBoxIcon.Information);
                    grvData.FocusedColumn = colSoCaBiet;
                    return false;
                }
               
                if (ct_pyc_bll.TaoBang("select * from DangKyCaBiet where SoCaBiet=N'" + grvData.GetRowCellValue(i, colSoCaBiet).ToString() + "'").Rows.Count == 0)
                {
                    XtraMessageBox.Show("Số cá biệt không tồn tại.Hãy nhập lại!", box.Caption, MessageBoxButtons.OK, MessageBoxIcon.Information);
                    grvData.FocusedColumn = colSoCaBiet;
                    return false;
                }
                //if(box.CompareDate(Convert.ToDateTime(grvData.GetRowCellValue(i,colNgayDuTra)),box.GetSystemDate())==-1)
                //{
                //    XtraMessageBox.Show("Ngày dự trả phải lớn hơn hoặc bằng ngày hiện tại.Hãy nhập lại!",box.Caption,MessageBoxButtons.OK,MessageBoxIcon.Information);
                //    grvData.FocusedColumn = colNgayDuTra;
                //    return false;
                //}
            }
            return true;
        }
        private bool checkValid()
        {
            if (txtMaBanDoc.Text.Trim() == "")
            {
                XtraMessageBox.Show("Bạn chưa nhập mã bạn đọc.",box.Caption,MessageBoxButtons.OK,MessageBoxIcon.Information);
                txtMaBanDoc.Focus();
                return false;
            }
            return true;
        }
        private Image ConvertToImage(DataTable d)
        {
            try
            {

                byte[] stream = (byte[])d.Rows[0]["Anh"];

                using (MemoryStream ms = new MemoryStream(stream, 0, stream.Length))
                {
                    ms.Write(stream, 0, stream.Length);
                    image = Image.FromStream(ms, true);
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            return image;
        }
        #endregion

        private void grvData_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e)
        {
            
            if (grvData.GetRowCellValue(grvData.FocusedRowHandle, colSoCaBiet).ToString().Equals(string.Empty))
            {
                e.Valid = false;
                e.ErrorText = "Số cá biệt không được để trống.";
            }
            if (box.CompareDate(Convert.ToDateTime(grvData.GetRowCellValue(grvData.FocusedRowHandle, colNgayDuTra)), box.GetSystemDate()) == -1)
            {
                e.Valid = false;
                e.ErrorText = "Ngày dự trả phải lớn hơn hoặc bằng ngày hiện tại.";
            }
        }

        private void txtMaBanDoc_Leave(object sender, EventArgs e)
        {
            DataTable dt_sinhvien = pyc_bll.Load_GhiMuon_SinhVien(txtMaBanDoc.Text.Trim());
            DataTable dt_GiaoVien = pyc_bll.Load_GhiMuon_GiaoVien(txtMaBanDoc.Text.Trim());
            if (dt_sinhvien.Rows.Count > 0 && dt_GiaoVien.Rows.Count == 0)
            {
                lblHoTen.Text = dt_sinhvien.Rows[0]["HoVaTen"].ToString();
                lblNgaySinh.Text = dt_sinhvien.Rows[0]["NgaySinh"].ToString();

                soLuongDaMuon = box.ToInt(dt_sinhvien.Rows[0]["SoLuongDaMuon"]);
                soLuongCon = box.ToInt(dt_sinhvien.Rows[0]["SoLuongDuocMuon"]);
                slg = soLuongCon - soLuongDaMuon;
                lblSoLuongMuon.Text = soLuongDaMuon.ToString() + "   Được Mượn Tiếp: " + slg.ToString();
                thoiGianMuon = box.ToInt(dt_sinhvien.Rows[0]["ThoiGianMuon"]);
                lblLoaiThe.Text = dt_sinhvien.Rows[0]["TenLoaiThe"].ToString();
                ngayLamThe = dt_sinhvien.Rows[0]["NgayLamThe"].ToString();
                ngayHetHan = dt_sinhvien.Rows[0]["NgayHetHan"].ToString();
                lblGiaTriThe.Text = "Từ Ngày: " + ngayLamThe.Substring(0, 9).ToString() + "   Đến Ngày: " + ngayHetHan.Substring(0, 9);
                pbAnh.Image = ConvertToImage(dt_sinhvien);
                grd_Data.Enabled = true;
            }
            else
                if (dt_sinhvien.Rows.Count == 0 && dt_GiaoVien.Rows.Count > 0)
                {
                    lblHoTen.Text = dt_GiaoVien.Rows[0]["HoVaTen"].ToString();
                    lblNgaySinh.Text = dt_GiaoVien.Rows[0]["NgaySinh"].ToString();

                    soLuongDaMuon = box.ToInt(dt_GiaoVien.Rows[0]["SoLuongDaMuon"]);
                    soLuongCon = box.ToInt(dt_GiaoVien.Rows[0]["SoLuongDuocMuon"]);
                    slg = soLuongCon - soLuongDaMuon;
                    lblSoLuongMuon.Text = soLuongDaMuon.ToString() + "   Được Mượn Tiếp: " + slg.ToString();
                    thoiGianMuon = box.ToInt(dt_GiaoVien.Rows[0]["ThoiGianMuon"]);
                    lblLoaiThe.Text = dt_GiaoVien.Rows[0]["TenLoaiThe"].ToString();
                    ngayLamThe = dt_GiaoVien.Rows[0]["NgayLamThe"].ToString();
                    ngayHetHan = dt_GiaoVien.Rows[0]["NgayHetHan"].ToString();
                    lblGiaTriThe.Text = "Từ Ngày: " + ngayLamThe.Substring(0, 9) + "   Đến Ngày: " + ngayHetHan.Substring(0, 9);
                    pbAnh.Image = ConvertToImage(dt_GiaoVien);
                    grd_Data.Enabled = true;
                }
                else if (dt_sinhvien.Rows.Count == 0 && dt_GiaoVien.Rows.Count == 0)
                    XtraMessageBox.Show("Không tồn tại Mã độc giả hoặc Thẻ đang ở trạng thái không hoạt động.",box.Caption,MessageBoxButtons.OK,MessageBoxIcon.Warning);
        }

        private void grvData_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
          {
           
            grvData.CloseEditor();
            grvData.UpdateCurrentRow();
            try
            {
                string soCaBiet = grvData.GetRowCellValue(grvData.FocusedRowHandle, colSoCaBiet).ToString();
                row = grvData.GetDataRow(e.RowHandle);
                dt = pyc_bll.TaoBang(@"select b.SoCaBiet,a.NhanDe from TaiLieu a join DangKyCaBiet b on a.MaTaiLieu=b.MaTaiLieu where SoCaBiet='" + soCaBiet + "'");
                if (dt.Rows.Count <= 0)
                {
                    XtraMessageBox.Show("Số cá biệt không tồn tại hoặc đang được cho mượn.", box.Caption, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    grvData.FocusedColumn = colSoCaBiet;
                }
                else 
                     nhande = dt.Rows[0]["NhanDe"].ToString();
                DateTime day;
                DateTime today = DateTime.Now;
                day = today.AddDays(thoiGianMuon);
                
                row["NgayDuTra"] = day;
                row["NhanDe"] = nhande;
            }
            catch (Exception)
            { }
            
        }

        private void btnThoat_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            this.Close();
        }
    }
}